
#pragma once

#include "core/olisp_core.h"

#ifdef LISP_FEAT_QUOTE_SUPPORT

/*
 * quote marker flags
 */
typedef enum
{
    QUOTE_NONE		= 0, ///< element is unquoted
    QUOTE_STRIGHT   = 1, ///< element is quoted by using -  '  - stright mark
    QUOTE_BACK      = 2, ///< element is quoted by using -  `  - back mark
    QUOTE_COMMA     = 3, ///< element is quoted by using -  ,  - comma
    QUOTE_COMMA_AT  = 4, ///< element is quoted by using -  ,@ - comma and at
    QUOTE_COLON     = 5, ///< element is quoted by using -  :  - colon
    QUOTE_AMPERSAND = 6, ///< element is quoted by using -  &  - ampersand
} quote_type_t;

typedef struct
{
    struct lisp_quote_mgr_vtbl_t * vtbl;
} lisp_quote_mgr_t;    

typedef struct lisp_quote_mgr_vtbl_t lisp_quote_mgr_vtbl_t;
struct lisp_quote_mgr_vtbl_t
{
    void (* dispose)( lisp_quote_mgr_t * self );

    void (* set_quote_marker)(
        lisp_quote_mgr_t * self, obj_t * elem, quote_type_t quote_marker );

    quote_type_t (* get_quote_marker)(
        lisp_quote_mgr_t * self, obj_t * elem );
};

lisp_quote_mgr_t * create_quote_mgr();

#endif
